#ifndef __IO_EXAPTION__
#define __IO_EXAPTION__
#include "Base.h"
#ifndef CC_BC32
#define GEN_OutOfBounds_ERROR(message) throw lampe::exception::OutOfBoundsException(__LINE__,__FILE__,__FUNCTION__,message)
#else
#define GEN_OutOfBounds_ERROR(message) throw lampe::exception::OutOfBoundsException(message)
#endif
#define BOUNDS_TEST(index,size) if (index<0 || index>=size) GEN_OutOfBounds_ERROR("")


namespace lampe{
namespace exception{
/***
* @class OutOfBoundsException
* Класс ошибки, который нужно "выкидывать" когда произашли какие-то ошибки типа выход за пределы массива
*
* Пример:
* try{
*	GEN_OutOfBounds_ERROR("Пример генерации OutOfBounds ошибки");
* }catch(OutOfBoundsException e){
*	printf("catched IO errror! %s\n",e.what());
* }
*
* */
class OutOfBoundsException:public Base{
public:
#ifndef CC_BC32
	OutOfBoundsException(u32 l,String f,String m,String m2):Base(l,f,m,m2){
		//nothing
	}
#else
	OutOfBoundsException(String m2):Base(m2){
		//nothing
	}
#endif
	virtual ~OutOfBoundsException() throw(){
		//nothing
	}
};

}//namespace exception
}//namespace lampe
#endif
